Client-server applications are distributed software systems that typically include a central server that provides services to a number of clients. The services are provided by sending data between clients and the server. When a client needs a service, it sends a request to the server. The server processes the request and sends an answer back to the client.
Automated functional user interface testing is a kind of testing that simulates a user operating on an application's user interface (UI) and verifies its functionality. The key component of such tests is a program library that is able to simulate a real user input by triggering events associated with actions like clicking mouse buttons or typing text. The test follows a given test case by using the application programming interface (API) of the library and verifies that the UI responds as expected.
In a client-server application framework, timing issues arise when testing an application. For example, users may be enabled by a client application to import files into a database on a server. The database is shared for the client-server application, and users may overwrite other users' files by using the same file name. If more than one requests to import a file of the same name arrives at the server at the same time, only the first import request will succeed. The rest of the import requests cannot be satisfied and their originators will be notified by the server that the operation failed. Thus, in order to test such error conditions in a client-side application, the timing and distribution of client application requests becomes crucial.